package com.example.lettcode._202411._20241112;

import java.util.ArrayList;
import java.util.List;

/*
119. 杨辉三角 II
给定一个非负索引 rowIndex，返回「杨辉三角」的第 rowIndex 行。
在「杨辉三角」中，每个数是它左上方和右上方的数的和。

示例 1:
输入: rowIndex = 3
输出: [1,3,3,1]

示例 2:
输入: rowIndex = 0
输出: [1]

示例 3:
输入: rowIndex = 1
输出: [1,1]
 */
public class _02_Yang_hui_san_jiao_2 {

    public static void main(String[] args) {
        List<Integer> row = getRow2(3);
        row.stream().forEach(System.out::println);
    }

    /*
    计算出整个杨辉三角，取最后一行数据
     */
    public static List<Integer> getRow(int rowIndex) {
        List<List<Integer>> retList = new ArrayList<>();
        for (int i = 0; i <= rowIndex; i++) {
            List<Integer> tempList = new ArrayList<>();
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    tempList.add(1);
                } else {
                    tempList.add(retList.get(i - 1).get(j - 1) + retList.get(i - 1).get(j));
                }
            }
            retList.add(tempList);
        }
        return retList.get(retList.size()-1);
    }

    /*
      只记录当前行的上一行数据
     */
    public static List<Integer> getRow2(int rowIndex) {
        List<Integer> retList = new ArrayList<>();
        for (int i = 0; i <= rowIndex; i++) {
            List<Integer> tempList = new ArrayList<>();
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    tempList.add(1);
                } else {
                    tempList.add(retList.get(j - 1) + retList.get(j));
                }
            }
            retList = tempList;
        }
        return retList;
    }
}
